平衡二叉树删除某个节点的方法

  1. 确认违规节点的位置

             首先我们找到待删除的节点Z,如果节点Z的两个孩子均为空,那么将其父节点中对应指向Z的指针置为空,然后删除节点Z。如果节点Z仅有一个孩子,那么将Z节点的父节点中指向Z的指针指向Z仅有的孩子,然后删除节点Z。如果节点Z有两个非空的子节点,那么找到节点Z的中序后继节点Y(即右子树的最左节点),将节点Y的Key值覆盖节点Z的Key值,此时节点Y的两个孩子均为空或者只有一个右孩子,将节点Y的右指针里的值覆盖其父节点中指向Y的指针,然后删除节点Y。综上所述,删除的节点要么是节点Z本身要么是节点Z的中序后继节点Y。我们现在将它们统一命名为X,假若节点X是一个左孩子就对其父节点P的平衡因子进行减1操作,否则对节点P的平衡因子进行加1操作。如果节点P的平衡因子的绝对值超出了1,那么节点P即为违规节点,如果P的平衡因子为0,此时表示P的树高减小了1,这会对上层的节点的平衡因子造成影响(如附图),此时根据P是一个左孩子还是右孩子对其父节点的平衡因子进行修改。如果P的平衡因子的绝对值为1,那么表示原来等高的两颗子树,现在其中一颗子树高度减1了,这节点P的树高并没有影响,此时不需要对平衡二叉树进行调整。Bf表示平衡因子。下面是上述判断的示意图:


            判断节点P的平衡因子的绝对值是否为1,若是则不需要调整树形结构,否则进行调整。

附图:


           此时删除红色节点会对树根的平衡因子产生影响。

           2.调整二叉树使之平衡  

                与平衡二叉树节点插入的调整方法相同,详见《平衡二叉树插入某个节点的方法》博文,不再赘述。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值